CloudFrontに登録したSSLサーバ証明書の署名アルゴリズムを確認する
こんにちは、虎塚です。
皆さん、SSLサーバ証明書のSHA-2移行はお済みでしょうか? 以前、移行作業の一環で必要なELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する方法をご紹介しました。
SSLサーバ証明書をインストールできるAWSサービスといえば、ほかにAmazon CloudFrontもあります。今回はCloudFrontについて、同様の内容を確認する手順をご紹介します。
前回の記事のおさらいですが、SSLサーバ証明書のSHA-2移行の対応方法は、次のとおりです。
- まず、SSL通信を利用しているサーバについて、インストール済みの証明書の署名アルゴリズムがSHA-1かどうかを確認します
- 次に、もしSHA-1証明書を使用していれば、証明書ベンダーにSHA-2証明書を新規に申請して、取得します
- 最後に、手元のサーバのSHA-1証明書をSHA-2証明書に入れ替えます
今回ご説明するのは、上記の最初の確認ステップについてです。
確認手順
1. AWSにアップロード済みの証明書を確認する
AWS CLIを使って、登録済みの証明書情報の一覧を表示します。
% aws --output json iam list-server-certificates \ | jq -c '.ServerCertificateMetadataList[] | {(.ServerCertificateId): .ServerCertificateName}' {"AAAAAAAAAAAAAAAAAACCC":"foo-bar-2015.crt"}
ここでは、コマンドの実行結果から、jqで証明書のIDと名前を抽出しています。上の出力例では、1個の証明書のIDと名前が表示されました。
ELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する手順では、証明書のARNを取得しました。CloudFrontの場合は、証明書IDを取得するのがポイントです。
2. CloudFrontのDistributionにインストール済みの証明書を確認する
まず、AWS CLIでCloudFront APIを利用できるように、AWS CLIの設定を変更します。AWS CLIでは、2015年7月現在、CloudFront APIの使用はPreview状態です。helpコマンドを実行すると、その旨が表示されます。
% aws cloudfront help This service is only available as a preview service. However, if you'd like to use a basic set of cloudfront commands with the AWS CLI, you can enable this service by adding the following to your CLI config file: [preview] cloudfront=true or by running: aws configure set preview.cloudfront true
指示されたとおりのコマンドを入力して、Preview機能を有効にしましょう。
% aws configure set preview.cloudfront true
これでAWS CLIからCloudFront APIを利用できるようになります。
次に、AWS CLIを使って、確認した証明書がどのCloudFormationにインストールされているかを確認します。
% aws --output json cloudfront list-distributions \ | jq -c '.DistributionList.Items[] | {(.Id): .ViewerCertificate.IAMCertificateId}' {"E000AAA111BBBC":"AAAAAAAAAAAAAAAAAACCC"} {"E222DDD333EEEF":null}
ここでは、コマンドの実行結果から、jqでDistributionのIDとインストール済み証明書のIDを抽出しています。上の出力例では、E000AAA111BBBCには、AAAAAAAAAAAAAAAAAACCCというIDの証明書がインストールされています。nullの行があるDistributionは、ユーザが登録した証明書と関連づけらていません。
3. AWS CLIで証明書情報を取得する
ここからは、ELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する際の手順と同じです。
ELBにインストール済みの証明書が特定できたので、証明書情報を取得します。
% aws --output json iam get-server-certificate --server-certificate-name 証明書の名前 \ | jq -r '.ServerCertificate.CertificateBody' > work.crt
- 1行目は、出力をJSON形式にするオプションと、証明書の名前を指定するオプションです。
- 2行目は、出力されたJSONから、証明書の本文を取得するためのjqコマンドです。
出力内容の最初と最後についているダブルクォーテーションを除去し、改行文字(¥n)を実際の改行に変換するため、jqオプションの-rを使用しています。(参考: jqを活用してAPIレスポンス等から欲しい情報だけを抽出する【中級編】 | Developers.IO)
4. OpenSSLコマンドで証明書の署名アルゴリズムを確認する
ローカルに出力した証明書情報(work.crt)に対して、OpenSSLコマンドで内容を確認します。
SHA-1証明書の場合、次のような出力になります。
% openssl x509 -text -noout -in work.crt | grep Algorithm Signature Algorithm: sha1WithRSAEncryption Public Key Algorithm: rsaEncryption Signature Algorithm: sha1WithRSAEncryption
この場合、SHA-2証明書の申請と、証明書の入れ替えが必要と分かります。
SHA-2証明書の場合、たとえば次のような出力になります。
% openssl x509 -text -noout -in work.crt | grep Algorithm Signature Algorithm: sha256WithRSAEncryption Public Key Algorithm: rsaEncryption Signature Algorithm: sha256WithRSAEncryption
SHA-2には、SHA-384、SHA-512などのバリエーションがあるため、かならずしも上記のとおりの出力結果になるとは限りません。
おわりに
AWSにアップロードした証明書とCloudFrontの情報を照合して、CloudFrontにインストール済みの証明書を確認する方法を説明しました。
必要に応じて、SHA-2証明書に更新する計画を立てましょう。
それでは、また。
(2015/7/6 追記: 当初gsedを使用する手順をご紹介しましたが、jqの-rオプションを使うことでgsedを使わなくてもよくなると指摘いただきましたので、削除しました。都元さん、ありがとうございます)